Guten Morgen, könnt ihr mich alle hören?
Ich habe heute keine Slides, sondern tippe im Terminal herum und hoffe, dass es erhellend für euch ist.
Es geht um Kommandozeilen-Applikationen. Vielleicht habt ihr schon gelesen, worum es ungefähr geht.
Wer von euch baut auf der Arbeit öfter mal Shellscripts mit Bash oder so?
Und habt ihr da auch Kommandozeilenoptionen und Parameter?
Und sind die auch schön dokumentiert und die Dokumentation auf dem neuesten Stand?
Gibt es auch Bash Completion dafür?
Vielleicht kennt ihr Abspec, das habe ich schon mal vorgestellt.
Wer kann sich daran erinnern, da mal einen Talk gesehen zu haben?
Deswegen würde ich jetzt erst einmal Pearl zeigen. Bash kommt dann später noch, versprochen.
Vielleicht hätte ich doch noch zwei Minuten warten.
Soll ich nochmal von vorne anfangen?
Bei Abspec geht es darum, eine Spezifikation zu schreiben.
In Jaml zum Beispiel. Und diese Spezifikation deckt eigentlich alles ab, was man so nicht manuell programmieren möchte.
Also das sagt mir eben, ich habe Subkommandos.
Hier haben wir einen Subkommando namens Test1. Ich bin furchtbar schlecht, was Beispiele angeht.
Also denkt euch irgendwas Sinnvolles da.
Hier gibt es ein Summary von dem Subkommando und die Funktion im Pearl Code.
Und hier habe ich verschiedene Flags und die heißen dummerweise alle Flag- irgendwas.
Hier haben wir ein inkrementales Flag. Das kennt ihr bestimmt, wenn ich irgendwie minus VVV schreibe, dann steht da drinnen 3 nachher.
Es gibt auch Array Optionen, also mehrere Sachen rein können.
Und dann habe ich hier noch nested Subkommandos als Beispiel und hier sowas ähnliches wie Systemd, Service Start und Stop und so weiter.
Ich zeige am besten einfach mal das Skript.
So, mydemohelp und da kommt das bei raus. Und das ist eben der Teil, den ich nicht selber programmieren muss.
Das ist alles durch diese Jaml-Datei abgedeckt.
Hier habe ich also die Subkommandos, die ich aufrufen kann.
Und wenn ich das ohne irgendein Subkommando aufrufe, dann steht das hier unten.
Und jetzt rufe ich mal nested1 auf.
Und jetzt versuche ich mal das test1 Subkommando.
Und da seht ihr die ganzen Optionen, die ich so übergeben könnte. Ich habe jetzt keine übergeben, deswegen sind die im Prinzip leer.
Und jetzt mache ich mal C. So, da steht jetzt 4 drin.
Und wenn ich die Option D verwende, kann ich das direkt dahinter schreiben.
Da steht jetzt FU drin. Ich kann aber auch ein Leerzeichen machen.
Und wenn ich die lange Option nehme, muss ich natürlich ein Leerzeichen machen, also dass es alles unterstützt.
Es wird auch das Minusminuszeichen unterstützt. Kennt ihr das?
Da wird dann eben gesagt, jetzt ist alles mit den Optionen vorbei. Jetzt kommen nur noch Parameter.
Falls man Parameter hat, die mit Minusminus anfangen zum Beispiel.
So, jetzt hatten wir noch ein Flag. Da ist ein Enum angegeben.
Da können also nur diese Werte drin sein. Die Validierung auf dieses Enum funktioniert hier nicht.
Es sollte eigentlich funktionieren und ich erkläre euch später warum das jetzt hier in meinem Beispiel nicht funktioniert.
Was aber funktioniert, ist die Completion.
Hier haben wir also ein Enum und da wird dann automatisch die Bash Completion und die Z-Shot Completion für generiert.
Ich habe also auch multiple Parameter. Hier stehen also zwei Sachen drin.
Wenn ich jetzt irgendwas reinschreibe, dann könnte das im Prinzip auch validiert werden. Kann es aber wie gesagt jetzt hier nicht.
Was könnte ich noch zeigen? Ich habe hier das Service Subkommando.
Da habe ich eine Listenfunktion, die sagt mir, welche Services gerade aktiv sind oder nicht aktiv sind.
Jetzt sage ich Start und drücke Tab und dann kriege ich zur Auswahl die verschiedenen Services.
Wie geht das? Weil die stehen ja gar nicht im Jaml mit drin.
Und das geht dann so. Hier habe ich also den Parameter Service und ich kann eine Completion dafür angeben.
Das heißt, wenn dieser Parameter an der Reihe ist in der Kommandozeile, dann wird dieser Befehl aufgerufen, den ich ja eben auch schon mal aufgerufen habe.
Presenters
Tina Müller
Zugänglich über
Offener Zugang
Dauer
00:23:40 Min
Aufnahmedatum
2020-03-06
Hochgeladen am
2020-03-06 12:11:21
Sprache
de-DE
You write a bash script. Easy.
Later you add a single command line switch. Ok.
Again, later, you want to add another switch, maybe with a short and long option. Mmh, it gets slightly unreadable.
You want to add subcommands? Option validation? Usage output? Completion? Ugh, no...
I will show you an alternative!
Links:
https://metacpan.org/pod/App::Spec::Bash
(Tested with Bash 3.2.57)
https://github.com/perlpunk/shell-completions